perm filename PGSAI.SAI[VIS,HPM]1 blob sn#421714 filedate 1979-02-24 generic text, type C, neo UTF8
COMMENT ⊗   VALID 00003 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00002 00002	entry PTEXT,PTXTTR,PRECTA,PELLIP
C00005 00003	INTERNAL PROCEDURE PRECTA(REAL X1,Y1,X2,Y2)
C00006 ENDMK
C⊗;
entry PTEXT,PTXTTR,PRECTA,PELLIP;
BEGIN "PGSAI"
EXTERNAL PROCEDURE PLINE(REAL X1,Y1,X2,Y2);
EXTERNAL PROCEDURE PPOLYG(INTEGER N; REFERENCE REAL X,Y);
OWN REAL PXLO,PYLO,PXLIM,PYLIM,PXS,PYS,PDXS,PDYS;

INTERNAL PROCEDURE PTXTTR(REAL XPOS,YPOS,XSZ,YSZ,DXSZ(0.0),DYSZ(0.0));
   BEGIN
   PXLIM←XPOS; PXLO←XPOS; PXS←XSZ; PDXS←DXSZ;
   PYLIM←YPOS; PYLO←YPOS; PYS←YSZ; PDYS←DYSZ;
   END;

INTERNAL PROCEDURE PTEXT(STRING TXT);
   BEGIN
   EXTERNAL INTEGER LETAB;

   INTEGER I,J,IL,JL,LETT,PNT;

   WHILE LENGTH(TXT)>0 DO
      BEGIN
      LETT←LOP(TXT);
      IF LETT='15 THEN BEGIN PXLO←PXLIM; PYLO←PYLIM; END ELSE
      IF LETT='12 THEN BEGIN PXLO←PXLO-PDXS; PYLO←PYLO-PYS; END ELSE
      IF LETT='11 THEN BEGIN PXLO←PXLO+4*PXS; PYLO←PYLO+4*PDYS; END ELSE
      IF LETT='177 THEN BEGIN PXLO←PXLO-PXS; PYLO←PYLO-PDYS; END ELSE
      IF LETT=0 THEN ELSE
         BEGIN
         PNT←POINT(3,MEMORY[LOCATION(LETAB)+3*LETT],-1);
         J←ILDB(PNT); I←ILDB(PNT);
         WHILE ¬(J=7 ∧ I=7) DO
            BEGIN
            IL←I; JL←J;
            J←ILDB(PNT); I←ILDB(PNT);
	    IF J≠7 THEN
               BEGIN
               IF IL=7 THEN IL←-3; IF I=7 THEN I←-3;
	       PLINE(PXLO+(JL/6)*PXS+((IL+1)/10)*PDXS,PYLO+((IL+1)/10)*PYS+(JL/6)*PDYS,
	             PXLO+(J/6)*PXS+((I+1)/10)*PDXS,PYLO+((I+1)/10)*PYS+(J/6)*PDYS);
               END
            ELSE IF I=0 THEN BEGIN J←ILDB(PNT); I←ILDB(PNT); END;
            END;
         PXLO←PXLO+PXS;
         PYLO←PYLO+PDYS;
         END;
      END;
   END;

INTERNAL PROCEDURE PRECTA(REAL X1,Y1,X2,Y2);
   BEGIN
   REAL ARRAY X,Y[1:4];
   X[1]←X1; Y[1]←Y1;
   X[2]←X1; Y[2]←Y2;
   X[3]←X2; Y[3]←Y2;
   X[4]←X2; Y[4]←Y1;
   PPOLYG(4,X[1],Y[1]);
   END;

INTERNAL PROCEDURE PELLIP(REAL X1,Y1,X2,Y2);
   BEGIN
   REAL ARRAY X,Y[1:64];
   REAL CX,CY,RX,RY;
   INTEGER I;
   CX←(X1+X2)/2; CY←(Y1+Y2)/2; RX←(X2-X1)/2; RY←(Y2-Y1)/2;
   FOR I←1 STEP 1 UNTIL 64 DO
      BEGIN
      X[I]←CX+RX*COS(2*3.1415926*I/64);
      Y[I]←CY+RY*SIN(2*3.1415926*I/64);
      END;
   PPOLYG(64,X[1],Y[1]);
   END;
END;